XMLP=xmlparser
DTDP=dtdparser
ANL=analyzer
EXE=executable
XMLT=xmltree
DTDT=dtdtree
HDR=headers

all: clean analyzer
	@echo
	@echo "**** Build Successful ****"

analyzer: parserXML parserDTD
	@echo
	@echo "---- Compilation de l'Analyzer ----"
	@echo
	g++ -g -I $(HDR)/ -o Analyzer $(XMLT)/bin/*.o $(DTDT)/bin/*.o $(XMLP)/bin/*.o $(DTDP)/bin/*.o $(ANL)/analyzer.cpp
	@mv Analyzer $(EXE)/

parserXML: treeXML $(XMLP)/xml.l $(XMLP)/xml.y
	@echo
	@echo "---- Compilation du Parseur XML ----"
	@echo
	flex -Pxml $(XMLP)/xml.l
	bison -p xml --debug --verbose --defines=$(HDR)/xml.tab.h $(XMLP)/xml.y
	@mv lex.xml.c xml.tab.c $(XMLP)/
	@mv xml.output $(XMLP)/debug/
	g++ -c -g -I $(HDR)/ -DYYDEBUG=1 $(XMLP)/lex.xml.c $(XMLP)/xml.tab.c
	@mv *.o $(XMLP)/bin/

parserDTD: treeDTD $(DTDP)/dtd.l $(DTDP)/dtd.y
	@echo
	@echo "---- Compilation du Parseur DTD ----"
	@echo
	flex -Pdtd $(DTDP)/dtd.l
	bison -p dtd --debug --verbose --defines=$(HDR)/dtd.tab.h $(DTDP)/dtd.y
	@mv lex.dtd.c dtd.tab.c $(DTDP)/
	@mv dtd.output $(DTDP)/debug/
	g++ -c -g -I $(HDR)/ -DYYDEBUG=1 $(DTDP)/lex.dtd.c $(DTDP)/dtd.tab.c
	@mv *.o $(DTDP)/bin/
	
treeXML:
	@echo
	@echo "---- Compilation de l'arbre XML ----"
	@echo
	g++ -g -c -I $(HDR)/ $(XMLT)/*.cpp
	@mv *.o $(XMLT)/bin/

treeDTD:
	@echo
	@echo "---- Compilation de l'arbre DTD ----"
	@echo
	g++ -g -c -I $(HDR)/ $(DTDT)/*.cpp
	@mv *.o $(DTDT)/bin/

clean:
	@rm -rf $(XMLP)/*.c $(DTDP)/*.c $(HDR)/*.tab.h $(XMLP)/bin/*.o $(DTDP)/bin/*.o $(XMLP)/debug/*.output $(DTDP)/debug/*.output $(EXE)/analyzer $(XMLT)/bin/*.o $(DTDT)/bin/*.o

Test:
	$(EXE)/Analyzer $(EXE)/rap3.xml $(EXE)/rap1.dtd 
